package com.hzit.servlet;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.hzit.entity.PageResult;
import com.hzit.entity.R;
import com.hzit.entity.Student;
import com.hzit.service.StudentService;
import com.hzit.service.impl.StudentServiceImpl;
import com.hzit.vo.StudentVo;
import lombok.SneakyThrows;
import org.omg.CORBA.INTERNAL;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

import static net.sf.jsqlparser.parser.feature.Feature.update;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@WebServlet("/student")
public class StudentServlet extends HttpServlet {
	private StudentService studentService ;
	@SneakyThrows
	@Override
	public void init() throws ServletException {
		studentService = new StudentServiceImpl();
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1. 处理post请求的中文乱码
		req.setCharacterEncoding("UTF-8");
		//2. 设置响应到浏览器的显示的数据格式
		resp.setContentType("text/html;charset=utf8");
		//3. 得到请求参数,区分不同的操作(增,删,改,查)
		String cmd = req.getParameter("cmd");
		if(StrUtil.isNotBlank(cmd)){  // 相当于: cmd != null && !"".equals(cmd)
			if("list".equals(cmd)){
				list(req,resp);                 // 列表学生
			}
			if("findByPage".equals(cmd)){
				findByPage(req,resp);           // 分页查询
			}
			if("search".equals(cmd)){          // 条件查询带分页
				search(req,resp);
			}
			if("add".equals(cmd)){            // 添加学生
				add(req,resp);
			}
			if("update".equals(cmd)){         // 修改学生
				update(req,resp);
			}
			if("delete".equals(cmd)){         // 删除学生
				delete(req,resp);
			}
		}
	}



	//2. 列表学生
	private void list(HttpServletRequest req, HttpServletResponse resp)  throws ServletException, IOException {
		//2.1 查询出所有学生
		List<StudentVo> students = studentService.findAll();
		//2.2 将学生转换为json对象
		String s = JSON.toJSONString(students);
		//2.3 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();
	}
	//3. 分页查询
	private void findByPage(HttpServletRequest req, HttpServletResponse resp)  throws ServletException, IOException {
		//3.1 得到前端传入的分页参数
		Integer page = new Integer(req.getParameter("page"));           // 当前页
		Integer pageSize = new Integer(req.getParameter("pageSize"));   // 每页大小
		//3.2 开始查询查询
		PageResult<StudentVo> pr = studentService.findByPage(page,pageSize);
		//3.3 将学生转换为json对象
		String s = JSON.toJSONString(pr);
		//3.4 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();

	}
	//4. 条件查询带分页
	private void search(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//4.1 得到前端传入的分页参数
		Integer page = new Integer(req.getParameter("page"));           // 当前页
		Integer pageSize = new Integer(req.getParameter("pageSize"));   // 每页大小
		String stud = req.getParameter("stud");
		// 处理get请求中文乱码
		stud = new String(stud.getBytes("iso-8859-1"),"utf-8");
		//4.2 将字符串转换为studentVo对象
		StudentVo studentVo = JSON.parseObject(stud, StudentVo.class);

		System.out.println("studentVo = " + studentVo);
		//4.3 开始查询查询
		PageResult<StudentVo> pr = studentService.search(page,pageSize,studentVo);
		//4.4 将学生转换为json对象
		String s = JSON.toJSONString(pr);
		//4.5 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();
	}
	//5. 添加学生
	private void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String s = "";
		try{
			//5.1 得到前端传入的学生字符串
			String stud = req.getParameter("stud");
			//5.2 处理中文乱码
			stud = new String(stud.getBytes("iso-8859-1"),"utf-8");
			//5.3 将学生字符串转换为对象
			StudentVo studentVo = JSON.parseObject(stud, StudentVo.class);
			studentVo.setBirth("2000-1-1");
			System.out.println("studentVo = " + studentVo);
			//5.4 进行添加操作
			studentService.insert(studentVo);
			//5.5 构造添加成功后的提示的对象
			R r = R.ok("添加学生成功！");               //r对象有如下两个属性： code: 0 , msg: 添加学生成功！
			//5.6 将前端的r对象转换为字符串
			s = JSON.toJSONString(r);
		}catch (Exception ex){
			R r = R.error("添加学生失败!");
			s = JSON.toJSONString(r);
		}
		//5.7 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();

	}
	//6. 修改学生
	private void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String s = "";
		try{
			//6.1 得到前端传入的学生字符串
			String stud = req.getParameter("stud");
			//6.2 处理中文乱码
			stud = new String(stud.getBytes("iso-8859-1"),"utf-8");
			//6.3 将学生字符串转换为对象
			StudentVo studentVo = JSON.parseObject(stud, StudentVo.class);
			studentVo.setBirth("2000-1-1");
			System.out.println("studentVo = " + studentVo);
			//6.4 进行修改操作
			studentService.update(studentVo);
			//6.5 构造添加成功后的提示的对象
			R r = R.ok("修改学生成功！");               //r对象有如下两个属性： code: 0 , msg: 添加学生成功！
			//6.6 将前端的r对象转换为字符串
			s = JSON.toJSONString(r);
		}catch (Exception ex){
			R r = R.error("修改学生失败!");
			s = JSON.toJSONString(r);
		}
		//6.7 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();
	}
	//7. 根据学号删除学生
	private void delete(HttpServletRequest req, HttpServletResponse resp)  throws ServletException, IOException {
		String s = "";
		try{
			//7.1 得到前端传入的学生字符串
			String sid = req.getParameter("sid");
			System.out.println("sid = " + sid);
			//7.4 进行删除操作
			studentService.deleteById(sid);
			//7.5 构造添加成功后的提示的对象
			R r = R.ok("删除学生成功！");               //r对象有如下两个属性： code: 0 , msg: 添加学生成功！
			//7.6 将前端的r对象转换为字符串
			s = JSON.toJSONString(r);
		}catch (Exception ex){
			R r = R.error("删除学生失败!");
			s = JSON.toJSONString(r);
		}
		//7.7 将学生信息发送到页面
		resp.getWriter().println(s);
		resp.getWriter().flush();
	}


}
